/**
 * 封装缓存
 * @param data
 *  key 键名
 *  value 键值
 *  time 过期时间
 * @returns 返回键值
 */
function cache (key: string, value?: any, time?: number): any {
  value = value ?? false
  time = time ? time * 1000 : 30 * 60 * 1000
  if (key && value) {
    // 如果设置了 key 和 value 则是存入缓存
    const cacheValue = JSON.stringify({
      expiredTime: Date.now() + time,
      value: value
    })
    localStorage.setItem(key, cacheValue)
    // return JSON.parse(cacheValue ?? '{}') ?? false
    return cache(key)
  } else {
    // 如果没有设置 value 则是取出缓存
    const cache = JSON.parse(localStorage.getItem(key) ?? '{}') ?? false
    if (cache) {
      // 如果可以取出缓存则判断此缓存是否过期
      if (cache.expiredTime > Date.now()) {
        // 如果缓存中的时间比当前时间大则未过期
        return cache.value
      } else {
        // 如果缓存中的时间比当前时间小则此缓存已过期
        return false
      }
    } else {
      // 如果不可以取出缓存则代表无此缓存
      return false
    }
  }
}
/**
 * 清除缓存
 * @param key 清除缓存 key
 */
function unCache (key:string): boolean {
  const cache = JSON.parse(localStorage.getItem(key) ?? '') ?? false
  if (cache) {
    cache(key, null, 0)
    return true
  }
  return false
}

/**
 * 调整缓存过期时间 缓存 key 在 time 秒后过期
 * @param key 缓存名
 * @param time 过期时间 单位 s
 */
function setCacheTime (key:string, time:number): boolean {
  const cache = JSON.parse(localStorage.getItem(key) ?? '') ?? false
  if (cache) {
    cache(key, cache.value, time)
    return true
  }
  return false
}
export default {
  cache,
  unCache,
  setCacheTime
}
